{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b802150e-af10-465b-af82-e702e8bd6e25",
   "metadata": {},
   "source": [
    "思路：  \n",
    "1、数据读取、数据缺失值处理、标签数值化、数据标准化处理及数据集划分、数据集类别可视化  \n",
    "2、选取不同近邻个数，进行K近邻分类模型训练与测试、评价"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4b12d3f2-2fda-44c5-a29e-481426f863fe",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import warnings\n",
    "\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.preprocessing import LabelEncoder  # 字符串型数据编码\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.metrics import roc_curve, auc\n",
    "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n",
    "\n",
    "from matplotlib import rcParams\n",
    "import matplotlib\n",
    "# matplotlib.use(\"Agg\")  # 输出时不显示绘图\n",
    "import matplotlib.pyplot as plt  # matplotlib.use('agg')必须在本句执行前运行\n",
    "\n",
    "rcParams['font.family'] = 'simhei'  # 可以让图像中显示中文（黑体），无需引用\n",
    "rcParams['axes.unicode_minus'] = False  # 解决负数坐标显示问题\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "# #############################################################################################\n",
    "# 公共部分：分类模型评价体系evaluation\n",
    "# todo: 构建分类模型的评价体系并存储在evaluation中，方便对比查看，全局变量\n",
    "evaluation = pd.DataFrame({'Model': [],\n",
    "                           '准确率': [],\n",
    "                           '精确率': [],\n",
    "                           '召回率': [],\n",
    "                           'F1 值': [],\n",
    "                           'AUC值': [],\n",
    "                           '5折交叉验证的score': []})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "23a5489b-6a7a-4cb4-aa4b-5b45162b9f92",
   "metadata": {},
   "outputs": [],
   "source": [
    "#1.1 读数据\n",
    "df = pd.read_csv('./data/crx.data',decimal=',',header=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "053ac85c-bef0-4d1f-bc5a-59360975d1fa",
   "metadata": {},
   "outputs": [],
   "source": [
    "df.columns = ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10',\n",
    "                'A11', 'A12', 'A13', 'A14', 'A15', 'Label']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "9fddc5cc-dad6-44c2-babc-d44bfd9dc8ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A11            A15\n",
      "count  690.00000     690.000000\n",
      "mean     2.40000    1017.385507\n",
      "std      4.86294    5210.102598\n",
      "min      0.00000       0.000000\n",
      "25%      0.00000       0.000000\n",
      "50%      0.00000       5.000000\n",
      "75%      3.00000     395.500000\n",
      "max     67.00000  100000.000000\n",
      "行用卡审批通过的数量： 307\n",
      "行用卡审批通过的数量： 383\n"
     ]
    }
   ],
   "source": [
    "print(df.describe())\n",
    "print(\"信用卡审批通过的数量：\", df[df['Label']=='+']['Label'].count())\n",
    "print(\"信用卡审批通过的数量：\", df[df['Label']=='-']['Label'].count())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "37372016-631e-4eeb-ba22-820d581c67d7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "653\n"
     ]
    }
   ],
   "source": [
    "# 1.2 数据预处理，异常过滤\n",
    "df = df.replace('?',np.nan)\n",
    "df = df.dropna(how='any')\n",
    "print(len(df))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "c5e2d4f6-7c58-4148-bfc3-4fd1e222d256",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "过滤后信用卡审批通过的数量： 296\n",
      "过滤后信用卡审批通过的数量： 357\n"
     ]
    }
   ],
   "source": [
    "print(\"过滤后信用卡审批通过的数量：\", df[df['Label']=='+']['Label'].count())\n",
    "print(\"过滤后信用卡审批通过的数量：\", df[df['Label']=='-']['Label'].count())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "ba21d513-b951-454f-8aad-eeb243c3875c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A1</th>\n",
       "      <th>A2</th>\n",
       "      <th>A3</th>\n",
       "      <th>A4</th>\n",
       "      <th>A5</th>\n",
       "      <th>A6</th>\n",
       "      <th>A7</th>\n",
       "      <th>A8</th>\n",
       "      <th>A9</th>\n",
       "      <th>A10</th>\n",
       "      <th>A11</th>\n",
       "      <th>A12</th>\n",
       "      <th>A13</th>\n",
       "      <th>A14</th>\n",
       "      <th>A15</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b</td>\n",
       "      <td>30.83</td>\n",
       "      <td>0</td>\n",
       "      <td>u</td>\n",
       "      <td>g</td>\n",
       "      <td>w</td>\n",
       "      <td>v</td>\n",
       "      <td>1.25</td>\n",
       "      <td>t</td>\n",
       "      <td>t</td>\n",
       "      <td>1</td>\n",
       "      <td>f</td>\n",
       "      <td>g</td>\n",
       "      <td>00202</td>\n",
       "      <td>0</td>\n",
       "      <td>+</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>a</td>\n",
       "      <td>58.67</td>\n",
       "      <td>4.46</td>\n",
       "      <td>u</td>\n",
       "      <td>g</td>\n",
       "      <td>q</td>\n",
       "      <td>h</td>\n",
       "      <td>3.04</td>\n",
       "      <td>t</td>\n",
       "      <td>t</td>\n",
       "      <td>6</td>\n",
       "      <td>f</td>\n",
       "      <td>g</td>\n",
       "      <td>00043</td>\n",
       "      <td>560</td>\n",
       "      <td>+</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>a</td>\n",
       "      <td>24.50</td>\n",
       "      <td>0.5</td>\n",
       "      <td>u</td>\n",
       "      <td>g</td>\n",
       "      <td>q</td>\n",
       "      <td>h</td>\n",
       "      <td>1.5</td>\n",
       "      <td>t</td>\n",
       "      <td>f</td>\n",
       "      <td>0</td>\n",
       "      <td>f</td>\n",
       "      <td>g</td>\n",
       "      <td>00280</td>\n",
       "      <td>824</td>\n",
       "      <td>+</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>b</td>\n",
       "      <td>27.83</td>\n",
       "      <td>1.54</td>\n",
       "      <td>u</td>\n",
       "      <td>g</td>\n",
       "      <td>w</td>\n",
       "      <td>v</td>\n",
       "      <td>3.75</td>\n",
       "      <td>t</td>\n",
       "      <td>t</td>\n",
       "      <td>5</td>\n",
       "      <td>t</td>\n",
       "      <td>g</td>\n",
       "      <td>00100</td>\n",
       "      <td>3</td>\n",
       "      <td>+</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>b</td>\n",
       "      <td>20.17</td>\n",
       "      <td>5.625</td>\n",
       "      <td>u</td>\n",
       "      <td>g</td>\n",
       "      <td>w</td>\n",
       "      <td>v</td>\n",
       "      <td>1.71</td>\n",
       "      <td>t</td>\n",
       "      <td>f</td>\n",
       "      <td>0</td>\n",
       "      <td>f</td>\n",
       "      <td>s</td>\n",
       "      <td>00120</td>\n",
       "      <td>0</td>\n",
       "      <td>+</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>685</th>\n",
       "      <td>b</td>\n",
       "      <td>21.08</td>\n",
       "      <td>10.085</td>\n",
       "      <td>y</td>\n",
       "      <td>p</td>\n",
       "      <td>e</td>\n",
       "      <td>h</td>\n",
       "      <td>1.25</td>\n",
       "      <td>f</td>\n",
       "      <td>f</td>\n",
       "      <td>0</td>\n",
       "      <td>f</td>\n",
       "      <td>g</td>\n",
       "      <td>00260</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>686</th>\n",
       "      <td>a</td>\n",
       "      <td>22.67</td>\n",
       "      <td>0.75</td>\n",
       "      <td>u</td>\n",
       "      <td>g</td>\n",
       "      <td>c</td>\n",
       "      <td>v</td>\n",
       "      <td>2</td>\n",
       "      <td>f</td>\n",
       "      <td>t</td>\n",
       "      <td>2</td>\n",
       "      <td>t</td>\n",
       "      <td>g</td>\n",
       "      <td>00200</td>\n",
       "      <td>394</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>687</th>\n",
       "      <td>a</td>\n",
       "      <td>25.25</td>\n",
       "      <td>13.5</td>\n",
       "      <td>y</td>\n",
       "      <td>p</td>\n",
       "      <td>ff</td>\n",
       "      <td>ff</td>\n",
       "      <td>2</td>\n",
       "      <td>f</td>\n",
       "      <td>t</td>\n",
       "      <td>1</td>\n",
       "      <td>t</td>\n",
       "      <td>g</td>\n",
       "      <td>00200</td>\n",
       "      <td>1</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>688</th>\n",
       "      <td>b</td>\n",
       "      <td>17.92</td>\n",
       "      <td>0.205</td>\n",
       "      <td>u</td>\n",
       "      <td>g</td>\n",
       "      <td>aa</td>\n",
       "      <td>v</td>\n",
       "      <td>0.04</td>\n",
       "      <td>f</td>\n",
       "      <td>f</td>\n",
       "      <td>0</td>\n",
       "      <td>f</td>\n",
       "      <td>g</td>\n",
       "      <td>00280</td>\n",
       "      <td>750</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>689</th>\n",
       "      <td>b</td>\n",
       "      <td>35.00</td>\n",
       "      <td>3.375</td>\n",
       "      <td>u</td>\n",
       "      <td>g</td>\n",
       "      <td>c</td>\n",
       "      <td>h</td>\n",
       "      <td>8.29</td>\n",
       "      <td>f</td>\n",
       "      <td>f</td>\n",
       "      <td>0</td>\n",
       "      <td>t</td>\n",
       "      <td>g</td>\n",
       "      <td>00000</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>653 rows × 16 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    A1     A2      A3 A4 A5  A6  A7    A8 A9 A10  A11 A12 A13    A14  A15  \\\n",
       "0    b  30.83       0  u  g   w   v  1.25  t   t    1   f   g  00202    0   \n",
       "1    a  58.67    4.46  u  g   q   h  3.04  t   t    6   f   g  00043  560   \n",
       "2    a  24.50     0.5  u  g   q   h   1.5  t   f    0   f   g  00280  824   \n",
       "3    b  27.83    1.54  u  g   w   v  3.75  t   t    5   t   g  00100    3   \n",
       "4    b  20.17   5.625  u  g   w   v  1.71  t   f    0   f   s  00120    0   \n",
       "..  ..    ...     ... .. ..  ..  ..   ... ..  ..  ...  ..  ..    ...  ...   \n",
       "685  b  21.08  10.085  y  p   e   h  1.25  f   f    0   f   g  00260    0   \n",
       "686  a  22.67    0.75  u  g   c   v     2  f   t    2   t   g  00200  394   \n",
       "687  a  25.25    13.5  y  p  ff  ff     2  f   t    1   t   g  00200    1   \n",
       "688  b  17.92   0.205  u  g  aa   v  0.04  f   f    0   f   g  00280  750   \n",
       "689  b  35.00   3.375  u  g   c   h  8.29  f   f    0   t   g  00000    0   \n",
       "\n",
       "    Label  \n",
       "0       +  \n",
       "1       +  \n",
       "2       +  \n",
       "3       +  \n",
       "4       +  \n",
       "..    ...  \n",
       "685     -  \n",
       "686     -  \n",
       "687     -  \n",
       "688     -  \n",
       "689     -  \n",
       "\n",
       "[653 rows x 16 columns]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "1a395ab7-6f69-4dd5-85df-cce4adbe2425",
   "metadata": {},
   "outputs": [],
   "source": [
    "#1.3 将变量中的字符转换成对应的数字\n",
    "le = LabelEncoder()\n",
    "new_data = []\n",
    "for i in range(df.shape[1]):\n",
    "    new_data.append(le.fit_transform(df.iloc[:,i]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "da606969-edb4-42b0-868f-28377f9c1c09",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  1, 153,   0, ...,  68,   0,   0],\n",
       "       [  0, 321, 158, ...,  11, 114,   0],\n",
       "       [  0,  88,  16, ...,  94, 134,   0],\n",
       "       ...,\n",
       "       [  0,  96,  90, ...,  67,   1,   1],\n",
       "       [  1,  20,   7, ...,  94, 129,   1],\n",
       "       [  1, 193, 145, ...,   0,   0,   1]], dtype=int64)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_data = np.array(new_data).T\n",
    "new_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "4daf8e34-9aa6-4887-b4ab-8b0d3ae12721",
   "metadata": {},
   "outputs": [],
   "source": [
    "new_data = pd.DataFrame(new_data,columns=['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10',\n",
    "                'A11', 'A12', 'A13', 'A14', 'A15', 'Label'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "9d254de9-05ee-4d99-96f3-50d1355233ea",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A1</th>\n",
       "      <th>A2</th>\n",
       "      <th>A3</th>\n",
       "      <th>A4</th>\n",
       "      <th>A5</th>\n",
       "      <th>A6</th>\n",
       "      <th>A7</th>\n",
       "      <th>A8</th>\n",
       "      <th>A9</th>\n",
       "      <th>A10</th>\n",
       "      <th>A11</th>\n",
       "      <th>A12</th>\n",
       "      <th>A13</th>\n",
       "      <th>A14</th>\n",
       "      <th>A15</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>153</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>68</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>321</td>\n",
       "      <td>158</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>82</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>114</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>88</td>\n",
       "      <td>16</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>36</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>94</td>\n",
       "      <td>134</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>123</td>\n",
       "      <td>46</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>90</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>31</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>42</td>\n",
       "      <td>174</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>41</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>37</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>648</th>\n",
       "      <td>1</td>\n",
       "      <td>51</td>\n",
       "      <td>56</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>89</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>649</th>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>25</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>67</td>\n",
       "      <td>101</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>650</th>\n",
       "      <td>0</td>\n",
       "      <td>96</td>\n",
       "      <td>90</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>67</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>651</th>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>94</td>\n",
       "      <td>129</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652</th>\n",
       "      <td>1</td>\n",
       "      <td>193</td>\n",
       "      <td>145</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>125</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>653 rows × 16 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     A1   A2   A3  A4  A5  A6  A7   A8  A9  A10  A11  A12  A13  A14  A15  \\\n",
       "0     1  153    0   1   0  12   7   30   1    1    1    0    0   68    0   \n",
       "1     0  321  158   1   0  10   3   82   1    1    6    0    0   11  114   \n",
       "2     0   88   16   1   0  10   3   36   1    0    0    0    0   94  134   \n",
       "3     1  123   46   1   0  12   7   90   1    1    5    1    0   31    3   \n",
       "4     1   42  174   1   0  12   7   41   1    0    0    0    2   37    0   \n",
       "..   ..  ...  ...  ..  ..  ..  ..  ...  ..  ...  ...  ...  ...  ...  ...   \n",
       "648   1   51   56   2   2   4   3   30   0    0    0    0    0   89    0   \n",
       "649   0   70   25   1   0   1   7   62   0    1    2    1    0   67  101   \n",
       "650   0   96   90   2   2   5   2   62   0    1    1    1    0   67    1   \n",
       "651   1   20    7   1   0   0   7    1   0    0    0    0    0   94  129   \n",
       "652   1  193  145   1   0   1   3  125   0    0    0    1    0    0    0   \n",
       "\n",
       "     Label  \n",
       "0        0  \n",
       "1        0  \n",
       "2        0  \n",
       "3        0  \n",
       "4        0  \n",
       "..     ...  \n",
       "648      1  \n",
       "649      1  \n",
       "650      1  \n",
       "651      1  \n",
       "652      1  \n",
       "\n",
       "[653 rows x 16 columns]"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "63903e7d-156c-4aac-aba3-caf93e311952",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = new_data[new_data.columns[0:-1]]\n",
    "y = new_data[['Label']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "0d8e8422-0859-40d0-92ee-5f5e75c3ef94",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A1</th>\n",
       "      <th>A2</th>\n",
       "      <th>A3</th>\n",
       "      <th>A4</th>\n",
       "      <th>A5</th>\n",
       "      <th>A6</th>\n",
       "      <th>A7</th>\n",
       "      <th>A8</th>\n",
       "      <th>A9</th>\n",
       "      <th>A10</th>\n",
       "      <th>A11</th>\n",
       "      <th>A12</th>\n",
       "      <th>A13</th>\n",
       "      <th>A14</th>\n",
       "      <th>A15</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>153</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>68</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>321</td>\n",
       "      <td>158</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>82</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>88</td>\n",
       "      <td>16</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>36</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>94</td>\n",
       "      <td>134</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>123</td>\n",
       "      <td>46</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>90</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>31</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>42</td>\n",
       "      <td>174</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>41</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>37</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>648</th>\n",
       "      <td>1</td>\n",
       "      <td>51</td>\n",
       "      <td>56</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>89</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>649</th>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>25</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>67</td>\n",
       "      <td>101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>650</th>\n",
       "      <td>0</td>\n",
       "      <td>96</td>\n",
       "      <td>90</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>67</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>651</th>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>94</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652</th>\n",
       "      <td>1</td>\n",
       "      <td>193</td>\n",
       "      <td>145</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>125</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>653 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     A1   A2   A3  A4  A5  A6  A7   A8  A9  A10  A11  A12  A13  A14  A15\n",
       "0     1  153    0   1   0  12   7   30   1    1    1    0    0   68    0\n",
       "1     0  321  158   1   0  10   3   82   1    1    6    0    0   11  114\n",
       "2     0   88   16   1   0  10   3   36   1    0    0    0    0   94  134\n",
       "3     1  123   46   1   0  12   7   90   1    1    5    1    0   31    3\n",
       "4     1   42  174   1   0  12   7   41   1    0    0    0    2   37    0\n",
       "..   ..  ...  ...  ..  ..  ..  ..  ...  ..  ...  ...  ...  ...  ...  ...\n",
       "648   1   51   56   2   2   4   3   30   0    0    0    0    0   89    0\n",
       "649   0   70   25   1   0   1   7   62   0    1    2    1    0   67  101\n",
       "650   0   96   90   2   2   5   2   62   0    1    1    1    0   67    1\n",
       "651   1   20    7   1   0   0   7    1   0    0    0    0    0   94  129\n",
       "652   1  193  145   1   0   1   3  125   0    0    0    1    0    0    0\n",
       "\n",
       "[653 rows x 15 columns]"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "63a21d96-123f-491d-8663-c0c149306ad7",
   "metadata": {},
   "outputs": [],
   "source": [
    "#1.5 数据切分成训练和测试数据集\n",
    "train_size = 0.7\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = train_size, random_state=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a76755d-f812-425e-a2b7-28607ea89b38",
   "metadata": {},
   "source": [
    "### 步骤2 进行K近邻分类模型训练与测试、评价"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "16d46280-ad42-4b80-8296-2d51a68adc32",
   "metadata": {},
   "outputs": [],
   "source": [
    "n_neighbors =2\n",
    "model = KNeighborsClassifier(n_neighbors=n_neighbors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "d89dc515-c5cf-4794-8939-38ce692a62b5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2.1 根据选择的模型进行训练，预测\n",
    "knn_model = model\n",
    "knn_model.fit(X_train,y_train)\n",
    "y_test_predict = knn_model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "a4ed5ee2-67a4-4d38-b71a-2cc2997933b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0,\n",
       "       0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1,\n",
       "       0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0,\n",
       "       0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0,\n",
       "       0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0,\n",
       "       0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0,\n",
       "       0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,\n",
       "       0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0,\n",
       "       1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1],\n",
       "      dtype=int64)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test_predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "f087a8d3-c5c1-45dd-8d89-ebaa91937e76",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0,\n",
       "       1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0,\n",
       "       1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0,\n",
       "       0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1,\n",
       "       0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1,\n",
       "       0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1,\n",
       "       0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,\n",
       "       1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0,\n",
       "       1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1],\n",
       "      dtype=int64)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array(y_test).T.reshape(-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "deefff3d-e8eb-47b3-b0f6-5a7d2317bdc1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 步骤2.2 todo: 计算分类评价指标：测试集的准确率accuracy、精确率precision、召回率recall和综合评价指标 F1 值\n",
    "# 精确率是指分类器预测出的正例中真的是正例的比例\n",
    "# 召回率是所有真的正例被分类器正确找出来的比例\n",
    "# F1 值是精确率和召回率的调和均值\n",
    "acc_test = accuracy_score(y_test, y_test_predict)\n",
    "precision_test = precision_score(y_test, y_test_predict)\n",
    "recall_test = recall_score(y_test, y_test_predict)\n",
    "f1score_test = f1_score(y_test, y_test_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "8bf626b4-7b7e-4f92-a510-aa57ec064af8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 步骤2.3 todo: 绘制ROC曲线，计算auc，度量分类模型的预测能力\n",
    "# ROC曲线以召回率为纵轴，以假正例率为横轴，ROC曲线下的面积为AUC值\n",
    "y_test_predict_proba = knn_model.predict_proba(X_test)\n",
    "false_positive_rate, recall, thresholds = roc_curve(y_test, y_test_predict_proba[:, 1])\n",
    "roc_auc = auc(false_positive_rate, recall)  # 计算auc的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "75bd3622-602c-49f2-aaea-18c2b1a38a00",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure()\n",
    "plt.title('KNN分类模型(%d 个近邻)的 ROC-AUC 图' % n_neighbors)\n",
    "plt.plot(false_positive_rate, recall, 'r', label='AUC = %0.3f' % roc_auc)\n",
    "plt.legend(loc='best')\n",
    "plt.plot([0, 1], [0, 1], 'k--')\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.ylim([0.0, 1.0])\n",
    "plt.ylabel('真正例率(召回率)')\n",
    "plt.xlabel('假正例率')\n",
    "plt.savefig('./results/ROC_AUC_KNN_with_{}_neighbors.png'.format(n_neighbors))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8981e500-c838-4e3f-94e3-067447e10d52",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
